class RequisicoesController < ApplicationController
  def index
    list
    render :action => 'list'
  end
  
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
    :redirect_to => { :action => :list }
  
  def list
    @requisicao_pages, @requisicoes = paginate(:requisicoes, :per_page => 10, :order => 'created_at DESC')
  end
  
  def show
    @requisicao = Requisicao.find(params[:id])
    #@historico_pages, @historicos = paginate @requisicao.historicos, :conditions => [:order_by => "created_at DESC", :per_page => 10]   
    #paginação do historico incompleto
  end
  
  def new
    @requisicao = Requisicao.new
    @sistemas = Sistema.find(:all)
  end
  
  def create
    @requisicao = Requisicao.new(params[:requisicao])
    @requisicao.usuario_id = Goldberg.user.id
    for modulo in params[:modulo][:id]
      @requisicao.modulos << Modulo.find(modulo)
    end
    if @requisicao.save
      historico = Historico.new
      historico.estado = @requisicao.estado
      historico.observacao = 'Estado Inicial'
      historico.usuario_id = Goldberg.user.id
      @requisicao.historicos << historico
      redirect_to(:action => 'new_two', :requisicao => @requisicao)
    else
      @sistemas = Sistema.find(:all)
      render(:action => 'new')
    end
  end
  
  def new_two
    @requisicao = Requisicao.find(params[:requisicao])
  end
  
  def create_two
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.update_attributes(params[:requisicao])
      redirect_to(:action => 'new_three', :requisicao => @requisicao)
    else
      render(:action => 'new_two')
    end
  end
  
  def new_three
    @requisicao = Requisicao.find(params[:requisicao])
  end
  
  def edit
    @requisicao = Requisicao.find(params[:id])
    if not(@requisicao.usuario_id == Goldberg.user.id)
      flash[:warning] = "Você não pode editar essa requisição"
      redirect_to(:controller => 'analista', :action => 'index')
    end
  end
  
  def update
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.update_attributes(params[:requisicao])
      flash[:notice] = 'Requisi&ccedil;&atilde;o atualizada com sucesso'
      redirect_to :controller => 'analista', :action => 'show', :id => @requisicao
    else
      render :action => 'edit'
    end
  end
  
  def render_modulos
    @modulos = Modulo.find(:all, :conditions => ["sistema_id = ?", params[:id]])
  end
  
  def add_campo_data
  end
  
  def del_campo_data
  end
  
  def destroy
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.usuario_id == Goldberg.user.id
      @requisicao.destroy
      flash[:notice] = 'Requisi&ccedil;&atilde;o exclu&iacute;da.'
      redirect_to :controller => 'analista', :action => 'index'
    else
      flash[:notice] = 'Usuario sem privilégios para excluir essa requisição.'
      redirect_to :controller => 'analista', :action => 'index'
    end
  end
  
  def enviarParaAtualizacaoProducao_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'enviarParaAtualizacaoProducao'
  end
  
  def enviarParaAtualizacaoProducao
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.update_attributes(params[:requisicao])
      @requisicao.enviarParaAtualizacaoProducao!
      historico = Historico.new(params[:historicos])
      historico.usuario_id = Goldberg.user.id
      historico.estado = @requisicao.estado
      @requisicao.historicos << historico
      @requisicao.dispensarCertificacao!
      historico2 = Historico.new
      historico2.observacao = 'Transição automatica'
      historico2.usuario_id = Goldberg.user.id
      historico2.estado = @requisicao.estado
      @requisicao.historicos << historico2
            
      flash[:notice] = 'Requisi&ccedil;&atilde;o enviada para produção.'
      redirect_to :action => 'home', :controller => 'analista'      
    else
      render :action => 'show'
    end
  end
  
  def enviarParaDesenvolvimento_tela
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.estado != 'criada'
      redirect_to :action => 'list'
    end
  end
  
  def enviarParaDesenvolvimento
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.update_attributes(params[:requisicao])
      @requisicao.enviarParaDesenvolvimento!
      historico = Historico.new(params[:historicos])
      historico.usuario_id = Goldberg.user.id
      historico.estado = @requisicao.estado
      @requisicao.historicos << historico
      flash[:notice] = 'Requisi&ccedil;&atilde;o enviada para desenvolvimento.'
      redirect_to :action => 'home', :controller => 'analista' 
    else
      render :action => 'enviarParaDesenvolvimento', :controller => 'analista' 
    end
  end  
  
  def enviarParaCertificacao_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'enviarParaCertificacao'
  end
  
  def enviarParaCertificacao
    @requisicao = Requisicao.find(params[:id])
    if @requisicao.update_attributes(params[:requisicao])
      @requisicao.enviarParaCertificacao!
      historico = Historico.new(params[:historicos])
      historico.usuario_id = Goldberg.user.id
      historico.estado = @requisicao.estado
      @requisicao.historicos << historico      
      flash[:notice] = 'Requisi&ccedil;&atilde;o enviada para certificação.'
      redirect_to :action => 'home', :controller => 'analista' 
      
    else
      flash[:erro] = 'Data inválida'
      render :controller => 'analista', :action => 'enviarParaCertificacao_tela'
    end
  end 
  
  def escalarDesenvolvedor_tela
    @acao = 'escalarDesenvolvedor'
    $lista_desenv = []
    @requisicao = Requisicao.find(params[:id])
    @desenvolvedores = Goldberg::User.find(:all, :conditions => "role_id = '5' or role_id = '14'")
    if (@requisicao.estado != 'aguardandoDesenvolvimento' and @requisicao.estado != 'desenvolvimentoReprovadoPool' and @requisicao.estado != 'desenvolvimentoReprovadoAnal')
      redirect_to :action => 'home', :controller => 'pool' 
    end
  end
  
  
  def iniciarDesenvolvimento_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'iniciarDesenvolvimento'
  end   
 
  def suspenderDesenvolvimento_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'suspenderDesenvolvimento'
  end 
  

  
  def concluirDesenvolvimento_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'concluirDesenvolvimento'
  end
  
  def reprovarDesenvolvimento
    @requisicao = Requisicao.find(params[:id])
    @requisicao.reprovarDesenvolvimento!
    historico = Historico.new
    historico.attributes = params[:historico]
    historico.usuario_id = Goldberg.user.id
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico    
    flash[:notice] = 'Operação realizada com sucesso.'        
    redirect_to :action => 'list'
  end 
 
  def aprovarDesenvolvimento
    @requisicao = Request.find(params[:id])
    @requisicao.aprovarDesenvolvimento!
    historico = Historico.new
    historico.attributes = params[:historico]
    historico.usuario_id = Goldberg.user.id
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico    
    flash[:notice] = 'Operação realizada com sucesso.'        
    redirect_to :action => 'list'
  end 
  
  def atualizarImediatamente
    @requisicao = Requisicao.find(params[:id])
    @requisicao.atualizarImediatamente!
    historico = Historico.new
    historico.attributes = params[:historico]
    historico.usuario_id = Goldberg.user.id
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico    
    flash[:notice] = 'Operação realizada com sucesso.'        
    redirect_to :action => 'list'
  end
  
  def reprovarDesenvolvimentoAnalista_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'reprovarDesenvolvimentoAnalista'   
  end     
  # perfil banco  
  def iniciarAtualizacaoBdCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'iniciarAtualizacaoBdCert'
  end

  def cancelarAtualizacaoBdCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'cancelarAtualizacaoBdCert'
  end
  
  def suspenderAtualizacaoBdCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'suspenderAtualizacaoBdCert'
  end
  
  def concluirAtualizacaoBdCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'concluirAtualizacaoBdCert'
  end  
  
  def iniciarAtualizacaoBdProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'iniciarAtualizacaoBdProd'
  end  
  
  def suspenderAtualizacaoBdProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'suspenderAtualizacaoBdProd'
  end  
  
  def cancelarAtualizacaoBdProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'cancelarAtualizacaoBdProd'
  end  
  
  def concluirAtulizacaoBdProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'concluirAtulizacaoBdProd'
  end  
    

  # perfil Suporte   
  def iniciarAtualizacaoServidorCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'iniciarAtualizacaoServidorCert'
  end

  def cancelarAtualizacaoServidorCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'cancelarAtualizacaoServidorCert'
  end
  
  def suspenderAtualizacaoServidorCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'suspenderAtualizacaoServidorCert'
  end
  
  def concluirAtualizacaoServidorCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'concluirAtualizacaoServidorCert'
  end  
  
  def iniciarAtualizacaoServidorProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'iniciarAtualizacaoServidorProd'
  end  
  
  def suspenderAtualizacaoServidorProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'suspenderAtualizacaoServidorProd'
  end  
  
  def cancelarAtualizacaoServidorProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'cancelarAtualizacaoServidorProd'
  end  
  
  def concluirAtulizacaoServidorProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'concluirAtulizacaoServidorProd'
  end  

  #certificacao
  def escalarCertificador_tela
    @requisicao = Requisicao.find(params[:id])
    $lista_cert = []
    #      for cert in @requisicao.certificadores
    #        $lista_cert << cert.id
    #      end
    @certificadores = Goldberg::User.find(:all, :conditions => "role_id = '10'")
  end
  def solicitarAtualizacaoServidorCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'solicitarAtualizacaoServidorCert'    
  end
  
  def cancelarCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'cancelarCert'       
  end
  
  def solicitarAtualizacaoBdCert_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'solicitarAtualizacaoBdCert'        
  end
  #certificador
  def iniciarCertificacao_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'iniciarCertificacao'       
  end
  def reprovarRequisicao_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'reprovarRequisicao'        
  end
  def suspenderCertificacao_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'suspenderCertificacao'           
  end
  
  def aprovarRequisicao_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'aprovarRequisicao'     
  end
  
  #gerente
  def  autorizarAtualizacao_tela 
    @requisicao = Requisicao.find(params[:id])
    @acao = 'autorizarAtualizacao'            
  end
  
  #gerente producao
  def reportarErroProducao_tela 
    @requisicao = Requisicao.find(params[:id])
    @acao = 'reportarErroProducao'     
  end
  
  def autorizaEnvioProd_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'autorizaEnvioProd'      
  end
  
  def reprovarDesenvolvimento_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'reprovarDesenvolvimento'
  end
  def aprovarDesenvolvimento_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'aprovarDesenvolvimento'    
  end
  def aprovarDesenvolvimentoAnalista_tela
    @requisicao = Requisicao.find(params[:id])
    @acao = 'aprovarDesenvolvimentoAnalista'    
  end  
end
